package org.link.zuoye2;

import java.awt.Dimension;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * 
 * project_name:ZuoYe
 * package_name:org.link.zuoye2
 * file_name:Date2.java
 * @author Link
 * create_date:2015年8月12日 下午12:28:01
 * modified_date:
 * description:输入年份与月份打印出当月的的日历
 *
 */
public class Date2 extends JFrame{
	
	private JPanel panel1,panel2,panel3;
	private JButton bt;
	private JTextField field1,field2;
	private JLabel label1,label2,label3,label4,label5,label6,label7,label8,label9,label10,label11;
	private int num = 0;
	
	public Date2() throws ParseException{
		this.setSize(430,500);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = this.getSize();
		this.setLocation((int)((screenSize.getWidth()-frameSize.getWidth())/2), (int)(screenSize.getHeight()-frameSize.getHeight())/2);
		this.setTitle("日历打印");
		ImageIcon tp = new ImageIcon(Date1.class.getResource("/image/5555.jpg"));
		this.setIconImage(tp.getImage());
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭同时关闭进程
		this.setResizable(false);//设置窗体不可放大
		
		this.setLayout(null);
		
		label1 = new JLabel("年份");
		label1.setBounds(10, 16, 30, 30);
		label1.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		field1 = new JTextField();
		field1.setBounds(43, 16, 70, 30);
		field1.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		field1.setHorizontalAlignment(JTextField.CENTER);//设置文本框居中
		
		label2 = new JLabel("月份");
		label2.setBounds(135, 16, 50, 30);
		label2.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		field2 = new JTextField();
		field2.setBounds(170,16, 50, 30);
		field2.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		field2.setHorizontalAlignment(JTextField.CENTER);//设置文本框居中
		
		panel3 = new JPanel(new GridLayout(6, 7, 10, 0));//添加panel3面板
		panel3.setBounds(25, 120, 400, 350);
		//this.add(panel3);
		
		/**
		 * 按钮监听事件
		 */
		bt = new JButton("查询");
		bt.setBounds(280, 16, 70, 30);
		bt.setMargin(new Insets(0,0,0,0));//设置按钮的边缘空余部分为0
		bt.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		bt.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String s1 = field1.getText();
				String s2 = field2.getText();
				
				if(s1.equals("")||s2.equals("")){
					Date2.this.setTitle("年份或者月份不能为空!");
					return;
				}else if((print1(s1) == false)||(print1(s2) == false)){
					Date2.this.setTitle("输入年份或月份不能为除数字以外的字符!");
					return;
				}else if((Integer.parseInt(s2)<0)||(Integer.parseInt(s2)>12)){
					Date2.this.setTitle("月份超出范围,请重新输入!");
					return;
				}else{
					panel3.removeAll();//清空面板上的内容
					panel3.repaint();//重新设置面板上的内容
					Calendar c = Calendar.getInstance();//获取Calendar对象
					//System.out.println(c.toString());//测试用
								
					//int minday = c.getMinimum(Calendar.DATE);
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
					SimpleDateFormat sdf1 = new SimpleDateFormat("E");
					String str1 = field1.getText()+"-"+field2.getText()+"-"+01+"";
					Date dt1 = null;
					try {
						dt1 = sdf.parse(str1);
					} catch (ParseException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					String str2 = sdf1.format(dt1);//一个星期中的第一天是星期几
								
					c.setTime(dt1);
					int maxday1 = c.getActualMaximum(Calendar.DATE);//获取月份中的最大天数
					//System.out.println(Calendar.DATE);
					//System.out.println(c.toString());//测试用
					//System.out.println(maxday1);//测试用
								
					print(str2,label11,panel3,maxday1);//调用公共方法
								
					Date2.this.setTitle("日历打印");
					Date2.this.setVisible(true);//让窗体(panel3部分)重新显示
				}
			}
		});
		
		
		panel1 = new JPanel(null);
		panel1.setBounds(0, 0, 430, 50);
		panel1.add(label1);  panel1.add(field1);  panel1.add(label2);  panel1.add(field2);  panel1.add(bt);
		this.add(panel1);
		
		
		panel2 = new JPanel(new GridLayout(1, 7, 0, 0));
		panel2.setBounds(10, 80, 410, 30);
		
		label3 = new JLabel("星期一");
		label3.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label4 = new JLabel("星期二");
		label4.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label5 = new JLabel("星期三");
		label5.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label6 = new JLabel("星期四");
		label6.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label7 = new JLabel("星期五");
		label7.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label8 = new JLabel("星期六");
		label8.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		label9 = new JLabel("星期天");
		label9.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
		
		panel2.add(label9);  panel2.add(label3);  panel2.add(label4);  panel2.add(label5);  panel2.add(label6);  panel2.add(label7);  panel2.add(label8); 
		this.add(panel2);
		
		Calendar c = Calendar.getInstance();//获取Calendar对象
		int maxday = c.getActualMaximum(Calendar.DATE);//月份中的最大天数
		//System.out.println(c.getActualMaximum(Calendar.HOUR_OF_DAY));
		//int minday = c.getMinimum(Calendar.DATE);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat sdf1 = new SimpleDateFormat("EE");
		String str = c.get(Calendar.YEAR)+"-"+(c.get(Calendar.MONTH)+1)+"-"+01+"";
		Date dt1 = sdf.parse(str);
		String str1 = sdf1.format(dt1);//一个星期中的第一天是星期几
		
		print(str1,label10,panel3,maxday);//调用公共方法
		
		
	}
	
	/**
	 * 
	 * description: panel3(日历输出显示)方法
	 * 2015年8月12日 下午12:31:10
	 * @author Link
	 * void
	 *
	 */
	public void print(String str1,JLabel label,JPanel panel,int maxday){//封装公共方法
		
		if(str1.equals("星期一")){//判断前面需空出的个数num表示
			num = 1;
		}else if(str1.equals("星期二")){
			num = 2;
		}else if(str1.equals("星期三")){
			num = 3;
		}else if(str1.equals("星期四")){
			num = 4;
		}else if(str1.equals("星期五")){
			num = 5;
		}else if(str1.equals("星期六")){
			num = 6;
		}else{
			num = 0;
		}
		
		for(int i = 0;i<num;i++){//每个月1号前面的空余部分
			label = new JLabel("");
			panel.add(label);
		}
		
		for(int i = 1;i<=maxday;i++){//日历显示部分
			label = new JLabel(i+"");
			label.setFont(new Font("微软雅黑",Font.ROMAN_BASELINE,14));
			panel.add(label);
		}
		for(int i = maxday+num+1;i<=42;i++){//剩余部分
			label = new JLabel("");
			panel.add(label);
		}
		Date2.this.add(panel);
	}
	
	/**
	 * 
	 * description: 判断输入的年份和月份是否是数字以外的字符
	 * 2015年8月12日 下午12:31:44
	 * @author Link
	 * boolean
	 *
	 */
	public boolean print1(String s1){//判断输入的年份和月份是否是数字以外的字符
		
		char[] c1 = s1.toCharArray();			
		for(int i = 0;i<c1.length;i++){
			if(Character.isDigit(c1[i])){//判断每一个字符是否为数字
				continue;
			}else{
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 
	 * description: 主函数入口
	 * 2015年8月12日 下午12:32:24
	 * @author Link
	 * void
	 *
	 */
	public static void main(String[] args) throws ParseException {
		Date2 da2 = new Date2();
		da2.setVisible(true);
	}
}













